ÄOCTOR ×HO ÄATA ÂASE BY ÌEN ÌINDSAY ÔHIS DISK É WANTED TO HAVE SEVERAL PROGRAMS DEMONSTRATE FILE HANDLING, ESPECIALLY WITH RANDOM FILES. ÄOCTOR ×HO PRESENTED ITSELF AS AN EXCELLENT TOPIC. ÔHIS SCIENCE FICTION SHOW HAS BEEN ON THE AIR FOR 24 YEARS NOW, WITH A TOTAL OF OVER 150 MOVIE LENGTH SHOWS. ÉN EACH SHOW, THE ÄOCTOR HAS VARYING COMPANIONS, AND MEETS DIFFERENT ADVERSARIES (AND EVEN INTERESTING MONSTERS). ÓO, É CREATED A DATA BASE SYSTEM THAT CAN EASILY KEEP TRACK OF A SERIES OF SHOWS. ÖERY LITTLE IN THIS DATA BASE IS SPECIFIC TO ÄOCTOR ×HO (TO ILLUSTRATE THIS, WE ALSO ARE INCLUDING ÓTAR ÔREK DATA ON THE DISK). É USED 8 FIELDS OF 27 CHARACTERS EACH TO STORE THE DATA FOR A SHOW, PLUS TWO EXTRA FIELDS THAT YOU CAN DECIDE HOW TO USE. ÔHE TITLES FOR EACH OF THE 8 MAIN FIELDS CAN VARY DEPENDING ON WHAT INFORMATION YOU WISH TO KEEP TRACK OF. ÆOR THE ÄOCTOR ×HO SHOWS É CHOSE THE FOLLOWING: ÓHOW ÎAME: ÄOCTOR: ÃOMPANION1: ÃOMPANION2: ÃOMPANION3: ÁDVERSARY1: ÁDVERSARY2: ÌOCATION: É'VE ALSO PROVIDED TWO EXTRA "USER" FIELDS. ÔHE FIRST IS AN "ÉÄ" OF 11 CHARACTERS. ÙOU COULD PUT THE VIDEO TAPE NUMBER HERE, THE NAME OF YOUR FRIEND WHO HAS THIS SHOW ON TAPE, OR A SHORT COMMENT ON THE SHOW. ÔHE OTHER FIELD IS ONLY ONE CHARACTER. ÉT CAN BE USED TO RATE EACH SHOW (Á,Â,Ã, ETC). É USE IT TO MARK THE SHOWS THAT É HAVE SEEN. ÓINCE É AM A TRUE ÄOCTOR ×HO FAN, É HAVE PAINSTAKENLY ENTERED ALL THE DATA FOR THE FIRST 144 SHOWS! ÔHIS LARGE DATA BASE OF INFORMATION IS ON THIS DISK ALONG WITH THE DATA BASE PROGRAM ITSELF. ÏNCE YOU HAVE A DATA BASE FILLED WITH INFORMATION, IT IS EASY AND FUN TO USE. ÆOR EXAMPLE, LET'S SAY YOUR FAVORITE ÄOCTOR ×HO ADVERSARIES WERE THE ÃÙÂÅÒÍÅÎ. ÕSING THE DATA BASE SYSTEM, YOU CAN CHOOSE THE ÓEARCH OPTION, AND IT WILL LIST EVERY SHOW THAT INCLUDED CYBERMEN AS ADVERSARIES! ÔHE NICE THING ABOUT THIS IS THAT THE SYSTEM USES ÃÏÍÁÌ'S ÉÎ OPERATOR TO FIND THE MATCHES. ÔHUS, YOU CAN ASK THE SYSTEM TO LOOK FOR ÃÙ AND IT WILL FIND BOTH ÃÙÂÅÒÍÅÎ AS WELL AS THEIR "PETS", THE ÃÙÂÅÒÍÁÔÓ. ÒEMEMBER, THE SEARCH IS VERY PICKY ON UPPER OR LOWER CASE. ÔHUS, ÃYB WILL NOT MATCH ÃÙÂ. ÔHEREFORE, YOU MAY WISH TO DO AS É DID ON MY DATA -- NEVER USE SHIFTED LETTERS! (ÏR ALWAYS CAPITALIZE THE FIRST LETTER OF EACH WORD). ÓINCE THIS SYSTEM USES A RANDOM FILE FOR ITS DATA, IT IS EASY TO RANDOMLY DISPLAY ANY SHOW. ÊUST TYPE IN THE SHOW NUMBER, AND INSTANTLY (ALMOST) ITS INFORMATION IS DISPLAYED. ÔO SEE THE NEXT SHOW JUST TYPE + (PLUS SIGN). ÔO SEE THE PREVIOUS SHOW TYPE - (MINUS SIGN). ÁNOTHER NICE FEATURE OF THIS SYSTEM IS ÂÒÏ×ÓÅ. ÉT ALLOWS YOU TO SCAN OVER ALL THE ENTRIES, ONE AFTER ANOTHER, STARTING AFTER THE SHOW CURRENTLY DISPLAYED. ÉT EVEN HAS A VARIABLE PAUSE BETWEEN SHOWS. ÆIVE SECONDS IS THE DEFAULT, BUT FOR A FAST SCAN, USE 0 FOR THE LENGTH OF PAUSE. ÎÏÔÅÓ ÁÂÏÕÔ ÔÈÅ ÐÒÏÇÒÁÍ ÔHE VARIABLE MARK$ IS USED TO DETERMINE WHETHER OR NOT THE INFORMATION DISPLAY IS NORMAL OR REVERSE FIELD. ÎEAR THE BEGINNING OF THE PROGRAM YOU WILL SEE THIS STATEMENT: DISPLAY(MARK$<> " ") ÄÉÓÐÌÁÙ IS THE NAME OF THE PROCEDURE THAT PRINTS THE INFORMATION ABOUT THE SHOW TO THE SCREEN. ÉT HAS ONE NUMERIC PARAMETER. ÉF THE PARAMETER IS ÆÁÌÓÅ (A VALUE OF 0) THEN THE INFORMATION IS DISPLAYED NORMALLY. ÉF IT IS ÔÒÕÅ (A VALUE NOT EQUAL TO 0) THEN THE INFORMATION IS DISPLAYED IN REVERSE FIELD. ÍARK$<> " " IS A COMPARISON THAT WILL ALWAYS BE EITHER ÔÒÕÅ OR ÆÁÌÓÅ, THUS PROVIDING THE PROPER PARAMETER. ÎOTICE THAT TO HAVE THE REVERSE DISPLAY, EACH VALUE PRINTED MUST BE THE CORRECT LENGTH BECAUSE THE REVERSE FIELD WILL STOP AT THE LAST CHARACTER. ÔHE LENGTH USED IN THIS PROGRAM IS 27. ÔHUS, IF THE SHOW NAME IS LESS THAN 27 CHARACTERS, É HAD TO DO SOMETHING TO PRINT REVERSE FIELD SPACES AT THE END OF THE NAME. É LET ÃÏÍÁÌ TAKE CARE OF THIS FOR ME BY USING SUBSTRING NOTATION WHEN INPUTING THIS DATA (FROM BOTH KEYBOARD INPUT AND FILE INPUT). ÆOR EXAMPLE: DIM NAME$ OF 27 INPUT "NAME:": NAME$ PRINT CHR$(18)+NAME$ PRINT "LENGTH IS";LEN(NAME$) INPUT "NAME:": NAME$(1:27) PRINT CHR$(18)+NAME$ PRINT "LENGTH IS";LEN(NAME$) ÒUN THAT PROGRAM AND TYPE ÔÅÓÔ AS THE NAME BOTH TIMES IT ASKS. ÔHE FIRST TIME IT HAS A LENGTH OF 4. ÔHE LAST TIME IT HAS A LENGTH OF 27 (THE VALUE WAS PADDED WITH SPACES AT THE END). ÐRINTING IT EACH TIME IN REVERSE FIELD SHOWS HOW THE (1:27) TAKES CARE OF FORMATTING PROBLEMS FOR ME! ÃALCULATING THE CORRECT RECORD LENGTH IS ALSO IMPORTANT WHEN USING RANDOM FILES. ÕSE THE MAXIMUM POSSIBLE LENGTH AS THE LENGTH FOR THE FILE. ÉN THIS CASE É HAD 8 FIELDS OF 27 CHARACTERS, 1 FIELD OF 11 CHARACTERS, AND 1 FIELD OF 1 CHARACTER. ÓINCE EACH FIELD IS A STRING, É ALSO MUST ADD A 2 BYTE COUNTER FOR EACH FIELD. ÔHUS 8*29 PLUS 13 PLUS 3 GIVES 248. ÔHE SMALLEST RECORD SIZE É CAN USE AND BE SURE TO HOLD ALL POSSIBLE DATA IS 248, WHICH É SET IN THE START'UP PROCEDURE. ÔO CALCULATE RECORD LENGTH WHEN USING ×ÒÉÔÅ ÆÉÌÅ REMEMBER THESE RULES: * Á REAL OR INTEGER NUMBER USES 5 BYTES * Á STRING NEEDS ITS MAXIMUM LENGTH ÐÌÕÓ 2 BYTES FOR A LENGTH COUNTER ËNOWING HOW MANY RECORDS HAVE BEEN WRITTEN IS ALSO IMPORTANT WHEN USING RANDOM FILES. ÉF YOU ATTEMPT TO READ A RECORD PAST THE LAST EXISTING ONE, AN ERROR OCCURS! Á COMMON WAY TO KEEP TRACK OF THE LAST RECORD NUMBER IS TO ×ÒÉÔÅ IT INTO THE FIRST RECORD OF THE FILE: WRITE FILE 2,1: LAST'RECORD ÌAST'RECORD IS A VARIABLE THAT HOLDS THE NUMBER OF THE LAST RECORD WRITTEN TO THE FILE. ÎOW, EACH TIME YOU USE THAT FILE, YOU CAN SIMPLY READ THE LAST RECORD NUMBER FROM THE FILE LIKE THIS: READ FILE 2,1: LAST'RECORD ÔHE ONLY SIDE EFFECT OF THIS IS THAT YOU CANNOT USE THE FIRST RECORD FOR REGULAR DATA. ÏFTEN, THIS IS NOT A PROBLEM. ÆOR EXAMPLE, IN OUR ORDER PROCESSING SYSTEM PROGRAMS (RUNNING UNDER ÉÂÍ Ðà ÃÏÍÁÌ) ÃÏÍÁÌ ÔODAY SUBSCRIBERS ARE PART OF A RANDOM FILE, STORED BY THEIR SUBSCRIBER NUMBER. ÓINCE É USE THE FIRST RECORD TO HOLD THE LAST SUBSCRIBER'S NUMBER, É STARTED MY SUBSCRIBER COUNT WITH 2. ÔHUS THERE IS NO SUBSCRIBER NUMBER 1. ÂUT IN KEEPING TRACK OF ÄOCTOR ×HO SHOWS, THERE IS A SHOW NUMBER 1. ÓINCE IT CAN'T BE WRITTEN INTO RECORD NUMBER 1, WE SIMPLY ADD 1 TO THE SHOW NUMBER TO GIVE THE RECORD NUMBER (READ THIS SENTENCE TWICE - IT MAKES SENSE). ÔHUS SHOW NUMBER 1 IS STORED IN RECORD NUMBER 2. ÂOTH READ'RECORD AND WRITE'RECORD PROCEDURES DO THE RECORD NUMBER CONVERSION. ÁNOTHER THING É TRY TO DO IS KEEP MY FILES CLOSED AS MUCH AS POSSIBLE. ÏN A ÃOMMODORE DISK, ALL FILES MUST BE PROPERLY CLOSED OR THEY CAN'T BE OPENED LATER. ÓO, É TAKE PRECAUTIONS (IN CASE OF A POWER OUTAGE ETC.) AND KEEP THE FILE CLOSED WHEN IT IS NOT DIRECTLY BEING USED. ÆOR EXAMPLE, WHILE SEARCHING THE FILE FOR MATCHES, É USE THE PROCEDURE READ'RECORD DIRECTLY, AND DON'T CLOSE THE FILE AFTER EACH RECORD IS READ. É ONLY CLOSE THE FILE AFTER É FIND A MATCH. ÈOWEVER, WHEN JUST GETTING INFORMATION ABOUT ONE SHOW, É HAVE THE PROCEDURE READ'IT WHICH FIRST OPENS THE FILE, THEN READS THE RECORD, THEN CLOSES THE FILE. ÔHUS THE FILE IS CLOSED WHILE É LOOK AT THAT RECORD (AND POSSIBLY EDIT IT). ÎOTE THAT É ALWAYS CLOSE THE FILE AFTER É WRITE TO IT. ÔHUS É ONLY HAVE ONE WRITE'RECORD PROCEDURE.